package com.hc.testaudio.deletea.test1

import android.media.audiofx.Visualizer
import com.yc.yclibx.comment.YcLog

/**
 * 音频播放信号采样
 */
class VisualizerUtil {
    private var visualizer: Visualizer? = null
    /**
     * 采集的速率
     * 默认使用最大采集速率 (单位：毫赫)
     */
    var rate = Visualizer.getMaxCaptureRate() / 2
    var mDataCaptureListener: Visualizer.OnDataCaptureListener? = null

    /**
     * @param audioSession 音频会话的标示
     * 当audioSession为0时，代表采集 混合输出信号
     */
    fun start(audioSession: Int) {
        visualizer?.enabled = false //如果不为空，则停止原先的采集
        visualizer = Visualizer(audioSession).apply {
            enabled =false
            captureSize = 512

        }
        //设置采集信号数组大小即onWaveFormDataCapture和onFftDataCapture里数组大小。设置必须在开始捕获前
        //                val captureSizeRange = Visualizer.getCaptureSizeRange() // Visualizer.getCaptureSizeRange()返回一个采样值的范围数组，0为最小值128,1为最大值1024！采样值都为2的n次幂！
        //        visualizer!!.captureSize = captureSizeRange[0]
        YcLog.e("采样速率：$rate")//20000
        //        YcLog.e("采样数量范围：" + captureSizeRange[0] + "~" + captureSizeRange[1])
        //        visualizer!!.captureSize = 4096

        visualizer!!.setDataCaptureListener(mDataCaptureListener, rate, true, true)
        //        val captureSize = Visualizer.getCaptureSizeRange()[1]
        //        val captureRate = Visualizer.getMaxCaptureRate() * 3 / 4
        //        Logger.d("", "精度: %s", captureSize)
        //        Logger.d("", "刷新频率: %s", captureRate)
        //        visualizer!!.setDataCaptureListener(object : Visualizer.OnDataCaptureListener {
        //
        //            override fun onFftDataCapture(visualizer: Visualizer?, fft: ByteArray?, samplingRate: Int) {
        //
        //                if (fft != null) {
        //                    for (i in 0 until fft.size step 2) {
        //                        val magnitude = hypot(fft[i].toDouble(), fft[i + 1].toDouble())
        //                        val phase = atan2(fft[i + 1].toDouble(), fft[i].toDouble())
        //                        val frequency = i * samplingRate / fft.size
        //                        YcLog.e("幅度：$magnitude  相位：$phase  频率：$frequency")
        //                    }
        //                }
        //            }
        //
        //            override fun onWaveFormDataCapture(visualizer: Visualizer?, waveform: ByteArray?, samplingRate: Int) {
        //                if (waveform != null) {
        //                    var v: Long = 0
        //                    for (i in 0 until waveform.size) {
        //                        v += waveform[i].toDouble().pow(2.0).toLong()
        //                    }
        //                    val volume = 10 * log10(v / waveform.size.toDouble())
        //                    YcLog.e("音量:$volume")
        //                }
        //
        //            }
        //        }, rate, true, true)
        //        visualizer!!.samplingRate//采样率  (单位：毫赫)
        //开启采样
        visualizer!!.enabled = true
    }

    fun stop() {
        if (visualizer?.enabled == true) {
            visualizer?.enabled = false
            visualizer?.release()
        }
    }
}
